

# 实现的是需求1

# 定义用户数据
user_list = [{'role': 'admin', 'account': 'admin', 'password': '123456', 'dept': 'tester'},
             {'role': 'user', 'account': 'test1', 'password': '123456', 'dept': 'tester'}]

# 定义默认返回结果
result = {'code':0,'message':''}


# 定义登录函数
def login(username, password):

    # 如果用户名为空或密码为空 ，给出用户名或密码不能为空的提示
    if username is None or username == '':
        result.update({'code': 1, 'message':'用户名不能为空'})
        return result
    if password is None or password == '':
        result.update({'code': 2, 'message': '密码不能为空'})
        return result

    # 如果用户名和密码匹配 ，登录成功，并且将用户的数据一起返回 。
    for user_info in user_list:
        if username == user_info.get('account') and password == user_info.get("password"):
            result.update({"message": "登录成功",'user_list':user_list})
            return result

    # 如果用户名和密码不匹配 ，返回请检查你的用户名或密码是否填写正确
    result.update({'code': 3,"message": "请检查你的用户名或密码是否填写正确"})
    return result


class User(object):

    # 用户查询功能
    def get_user(self,username=None):
        # 1. 判断用户是否登录 ，若已经登录，就可以走下面的代码，反之，返回权限不足的提示
        if result.get('code'):
            result.update({'code':11,'message':"用户未登录，无法查询用户数据"})
            return result
        # 2. 是否输入用户名
        if username is None or username == '':
            return result

        result.update({"user_list": []})
        # 3. 拿着传入的username进行在数据中查询，若查询到返回数据，若没有查询到给出提示 。
        lst = []    # 存放用户信息的数据
        for x in user_list:
            account = x.get('account')
            if username in account:     # 支持模糊查询
                x.pop('password')   # 将此键值对从字典中删除
                lst.append(x)

        # 若查询到返回数据，
        if lst:
            result.update({"code":10,"message":"用户查询成功!","user_list":lst})
            return result

        # 未查询到数据
        result.update({"code":12,"message":"未查询到用户"})
        return result

    # 用户修改功能
    def update_user(self,username,**kwargs):
        # 判断用户是否登录
        if result.get('code'):
            result.update({'code': 11, 'message': "用户未登录，无法查询用户数据"})
            return result

        # 判断用户名是否为空
        if username is None or username == '':
            result.update({"code":21,"message":"用户名不能为空!"})
            return result

        # 判断用户名是否存在
        for x in user_list:
            account = x.get('account')
            if username == account:
                # 进行更新
                dct = {}
                if kwargs:
                    for key,vls in kwargs.items():
                        if key == 'role':
                            dct['role'] = vls
                            continue
                        if key == 'dept':
                            dct['dept'] = vls
                            continue
                        if key == 'password':
                            dct['password'] = vls
                            continue
                    if dct:
                        x.update(dct)       # 更新字典中的值
                        return {"code":20,"message":"更新成功"}
                return result
        return {"code":23,"message":"未更新任何数据"}

    # 用户删除功能
    def delete_user(self,username):
        # 判断用户是否登录
        if result.get('code'):
            result.update({'code': 11, 'message': "用户未登录，无法查询用户数据"})
            return result

        # 判断用户名是否为空
        if username is None or username == '':
            result.update({"code":31,"message":"用户名不能为空"})
            return result

        # 判断输入的账号是否在当前数据中
        for x in user_list:
            account = x.get('account')
            if username == account:
                user_list.remove(x)
                return {"code":30 ,"message":"删除成功"}

        return {"code":32,"message":"未找到用户"}


if __name__ == '__main__':

    flag = True
    user = User()
    while flag:
        vls = input("请用户输入对应编号进行操作:"
              "\n 1:) 进行登录 "
              "\n 2:) 进行查询用户，请输入用户名: "
              "\n 3:) 进行用户修改，请输入用户信息 "
              "\n 4:) 进行用户删除，请输入用户名 "
              "\n q:) 退出操作 "
              "\n 其它字符:) 未知操作，请重新输入")
        if not vls in ('1','2','3','4','q','quit'):
            print("="*30)
            continue

        if vls == '1':
            username = input("请输入用户名:")
            password = input("请输入密码:")
            login_reslut = login(username,password)
            print(login_reslut)
            print("=" * 30)

        # 用户查询
        if vls == '2':
            name = input("请输入查询用户名:")
            get_reslut = user.get_user(name)
            print(get_reslut)
            print("=" * 30)

        # 用户更新
        if vls == '3':
            user_dict = {}
            name = input("请输入用户名:")
            password = input("请输入密码:")
            role = input("请输入用户角色:")
            dept = input("请输入部门:")
            if password != '':
                user_dict['password'] = password
            if role != '':
                user_dict['role'] = role
            if dept != '':
                user_dict['dept'] = dept
            up_reslut = user.update_user(name,**user_dict)
            print(up_reslut)
            print("=" * 30)

        # 用户删除
        if vls == '4':
            name = input("请输入删除的用户名:")
            del_result = user.delete_user(name)
            print(del_result)
            print("=" * 30)


        if vls in ('q','quit'):
            flag = False
            print("退出成功！")